﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ConceptionLogiciel_Devoir1
{
    public partial class ucRetour : UserControl
    {
        SessionLocation sessLocationCourante;

        public ucRetour()
        {
            InitializeComponent();
            
        }

        private void ucRetour_Load(object sender, EventArgs e)
        {
            loadLstLocation();
            sessLocationCourante = new SessionLocation();
            grbRechercheLocation.Enabled = false;
            btnPaiement.Enabled = false;
            btnEnregistrer.Enabled = false;
        }

        // fonction pour charger le listview de locations actives
        private void loadLstLocation()
        {
            lstLocationActives.Items.Clear();
            CatalogueClient catClient = CatalogueClient.getInstance();

            foreach (KeyValuePair<string, Client> cl in catClient.getCatalogueClient())
            {
                foreach (KeyValuePair<int, SessionLocation> lo in cl.Value.getMapLocation())
                {
                    //if (lo.Value.getLocation().DateDebut <= DateTime.Now && lo.Value.getLocation().DateFin >= DateTime.Now)
                    if (lo.Value.getVehicule().Disponibilite.EnLocation)
                    {
                        ListViewItem row = new ListViewItem(new string[] { cl.Value.Nom + ", " + cl.Value.Prenom, String.Format("{0:MM/dd/yyyy}", lo.Value.getLocation().DateDebut), String.Format("{0:MM/dd/yyyy}", lo.Value.getLocation().DateFin), lo.Value.getVehicule().ToString() });
                        row.Tag = lo.Value;
                        lstLocationActives.Items.Add(row);
                    }
                }
            }
        }

        // trigger listview rowclick
        private void lstLocationActives_Click(object sender, EventArgs e)
        {
            ListViewItem item = lstLocationActives.SelectedItems[0];

            sessLocationCourante = (SessionLocation)item.Tag;

            fillLocationInterface(sessLocationCourante);

            if (lstLocationActives.Items.Count> 0)
                btnPaiement.Enabled = true;
        }

        // remplir l'interface lorsqu'une location est sélectionné dans le listview
        private void fillLocationInterface(SessionLocation _sessionLocation)
        {
            Vehicule vehicule = _sessionLocation.getVehicule();

            txtNomClient.Text = _sessionLocation.getClient().ToString();
            txtPermisConduire.Text = _sessionLocation.getClient().NoPermisConduire;
            txtVeAnnee.Text = vehicule.Annee.ToString();
            txtVeImmatriculation.Text = vehicule.Immatriculation;
            txtVeMarque.Text = vehicule.Marque;
            txtVeModele.Text = vehicule.Modele;
            txtVeKm.Text = vehicule.Kilometrage.ToString();
        }

        private void btnPaiement_Click(object sender, EventArgs e)
        {
            // le cas d'utilisation
            sessLocationCourante.effectuerPaiement("espece");
            lblPaiement.Text = "Le paiement effectué! Vérifiez vos données enregistrez le retour!";
            btnPaiement.Enabled = false;
            btnEnregistrer.Enabled = true;
        }

        // calculer le paiement 
        private void calcPayment(string _nouveauKm, string _rabais, string _dommage)
        {
            double nouveauKm = String.Equals(_nouveauKm, "") ? 0.00 : Convert.ToDouble(_nouveauKm);
            //_rabais.string enlever le signe de dollars pcq le convert chie
            //double rabais = String.Equals(_rabais, "") ? 0.00 : Convert.ToDouble(_rabais);
            double rabais = 0.00;
            sessLocationCourante.commencerRetour(nouveauKm, rabais, _dommage);

            fillInvoiceInfo();
        }

        private void fillInvoiceInfo()
        { 
            ListViewItem item = lstLocationActives.SelectedItems[0];
            sessLocationCourante = (SessionLocation)item.Tag;
            Facture facture = sessLocationCourante.getFacture();

            txtFactureDetails.Text = facture.ToString();
            txtFraisKm.Text = String.Format("{0:C}", facture.FraisKm);
            txtFraisRetard.Text = String.Format("{0:C}", facture.FraisRetard);
            txtRabais.Text = String.Format("{0:C}", facture.Rabais);
            txtBalanceClient.Text = String.Format("{0:C}", facture.getBalance());
        }

        // enregistrer le retour une fois que le paiement est effectue
        private void btnEnregistrer_Click(object sender, EventArgs e)
        {
            sessLocationCourante.sauvegarderRetour();
            lblPaiement.Text = "Retour sauvegardé avec succès";
            btnEnregistrer.Enabled = false;
            loadLstLocation();
        }

        // trigger pour calculer les frais
        private void txtNouveauKm_TextChanged(object sender, EventArgs e)
        {
            if (sessLocationCourante != null)
            {
                calcPayment(txtNouveauKm.Text, txtRabais.Text, txtDommage.Text);
            }
        }

        
    }
}
